package cn.sxy.mybatis.executor;

import cn.sxy.mybatis.mapping.BoundSql;
import cn.sxy.mybatis.mapping.MappedStatement;
import cn.sxy.mybatis.session.ResultHandler;
import cn.sxy.mybatis.session.RowBounds;
import cn.sxy.mybatis.transaction.Transaction;

import java.sql.SQLException;
import java.util.List;

/***
 * 定义了执行查询、获取事务、提交/回滚、关闭等最核心的行为。
 */
public interface Executor {

    ResultHandler NO_RESULT_HANDLER = null;

    //select都会走这里
    <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql);

    //返回当前执行器持有的事务对象。
    Transaction getTransaction();


    //提交事务
    void commit(boolean required) throws SQLException;

    //回滚事务
    void rollback(boolean required) throws SQLException;

    //关闭执行器
    void close(boolean forceRollback);

}
